package nrtech.br.com.angel.util;

import java.util.ArrayList;
import java.util.Arrays;

import nrtech.br.com.angel.dao.Config;
import nrtech.br.com.angel.dao.ConfigDao;
import nrtech.br.com.angel.dao.DaoMaster;
import nrtech.br.com.angel.dao.DaoMaster.DevOpenHelper;
import nrtech.br.com.angel.dao.DaoSession;
import nrtech.br.com.angel.dao.FormaPagto;
import nrtech.br.com.angel.dao.FormaPagtoDao;
import nrtech.br.com.angel.dao.GrupoLancto;
import nrtech.br.com.angel.dao.GrupoLanctoDao;
import nrtech.br.com.angel.dao.TipoDocto;
import nrtech.br.com.angel.dao.TipoDoctoDao;
import nrtech.br.com.angel.dao.TipoLancamento;
import nrtech.br.com.angel.dao.TipoLancamentoDao;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

public class AngelUtil {
	private static final ArrayList<String> formasPagto = new ArrayList<String>(Arrays.asList("Dinheiro", "Cheque",
			"Cartão crédito", "Cartão débito", "Depósito", "Transferência", "DOC", "TED"));

	private static final ArrayList<String> gruposLancto = new ArrayList<String>(Arrays.asList("Salários",
			"Financiamentos", "Educação", "Moradia", "Transporte", "Alimentação", "Lazer"));

	private static final ArrayList<String> tiposLancto = new ArrayList<String>(Arrays.asList("Despesas", "Receitas",
			"Gastos cartão", "Investimento"));

	private static final ArrayList<String> tiposDocto = new ArrayList<String>(Arrays.asList("Boleto", "Fatura",
			"Cheque", "Comprovante", "Carnê", "Duplicata", "Nota Fiscal"));

	public static SQLiteDatabase db;
	public static DaoMaster daoMaster;
	public static DaoSession daoSession;

	/**
	 * Inicia os objetos de conexão com o banco de dados
	 * 
	 * @param context
	 *            Contexto para iniciação dos objetos
	 * @author Nilson Rodrigo Carraro
	 */
	public static void initConnection(Context context) {
		DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "angelDB", null);
		db = helper.getWritableDatabase();
		daoMaster = new DaoMaster(db);
		daoSession = daoMaster.newSession();
	}

	/**
	 * Insere as informações padrão na base de dados. Sempre será chamada no
	 * início do aplicativo para garantir que os dados padrão estejam inseridos
	 * 
	 * @author Nilson Rodrigo Carraro
	 */
	public static void registerDefaultInfo() {
		daoSession.runInTx(new Runnable() {
			@Override
			public void run() {
			}
		});

		// config
		ConfigDao configDao = daoSession.getConfigDao();
		if (configDao.queryBuilder().list().size() == 0) {
			Config config = new Config();
			config.setAtivarAtualizacoesCotacoesInvest(true);
			config.setAtivarLembretes(true);
			config.setLembretesJanelas(true);
			config.setSolicitacoesJanelas(true);
			config.setNotifChamadas(false);
			config.setNotifModoSilencioso(true);
			config.setVersao("1");
			config.setTipoLicenca("ALL");
			daoSession.insert(config);
		}

		// forma pagamento
		FormaPagtoDao formaPagtoDao = daoSession.getFormaPagtoDao();
		if (formaPagtoDao.queryBuilder().list().size() == 0) {
			FormaPagto formaPagto;
			for (String nomeForma : formasPagto) {
				formaPagto = new FormaPagto();
				formaPagto.setNome(nomeForma);
				daoSession.insert(formaPagto);
			}
		}

		// Grupos Lancto
		GrupoLanctoDao grupoLanctoDao = daoSession.getGrupoLanctoDao();
		if (grupoLanctoDao.queryBuilder().list().size() == 0) {
			GrupoLancto grupoLancto;
			for (String nomeGrupo : gruposLancto) {
				grupoLancto = new GrupoLancto();
				grupoLancto.setAtivo(true);
				grupoLancto.setNome(nomeGrupo);
				daoSession.insert(grupoLancto);
			}
		}

		// Tipos Lancto
		TipoLancamentoDao tipoLanctoDao = daoSession.getTipoLancamentoDao();
		if (tipoLanctoDao.queryBuilder().list().size() == 0) {
			TipoLancamento tipoLancto;
			for (String nomeLancto : tiposLancto) {
				tipoLancto = new TipoLancamento();
				tipoLancto.setNome(nomeLancto);
				daoSession.insert(tipoLancto);
			}
		}

		// Tipos Docto
		TipoDoctoDao tipoDoctoDao = daoSession.getTipoDoctoDao();
		if (tipoDoctoDao.queryBuilder().list().size() == 0) {
			TipoDocto tipoDocto;
			for (String nomeDocto : tiposDocto) {
				tipoDocto = new TipoDocto();
				tipoDocto.setNome(nomeDocto);
				daoSession.insert(tipoDocto);
			}
		}
	}
}
